MIME-Version: 1.0
Server: CERN/3.0
Date: Sunday, 24-Nov-96 22:49:36 GMT
Content-Type: text/html
Content-Length: 8757
Last-Modified: Thursday, 03-Oct-96 22:13:21 GMT

<HTML>

<HEAD>

<TITLE>Computer Science 212</TITLE>

<META NAME="GENERATOR" CONTENT="Internet Assistant for Microsoft Word 2.0z">
</HEAD>

<BODY>

<P>
<CENTER><B>Computer Science 212 Fall 1996<BR>
</B></CENTER>
<P>
<CENTER><B>Course Information</B></CENTER>
<P>
<CENTER><B>August 29, 1996<BR>
</B></CENTER>
<P>
CS212 is an introductory course covering a broad range of computer
science concepts and techniques, including data abstraction, recursion,
program correctness, generic functions, object oriented programming,
pattern matching, and languages and their evaluators.  We use
the Dylan language, an object oriented dynamic language developed
at Apple Computer, which is well suited for covering a broad range
of introductory computer science topics.  This is not a course
about the Dylan language, it just happens to be the &quot;notation&quot;
that we have chosen for writing programs.  The major goals of
the course are to teach students how to think clearly about programs
and programming, and to provide a toolbox of modern programming
techniques that will be applicable in any language. <BR>

<P>
<I>What course to take</I>: Students often wonder whether to take
CS211 or CS212.  CS211 focuses on programming skills in the object-oriented
language Java, whereas CS212 provides exposure to a broad range
of computational and programming problems, using a number of programming
paradigms including functional, object-oriented and imperative
programming techniques.  If you have a good CS background or good
formal skills (e.g., mathematics or physics) you should probably
take CS212. Transfers between CS211 and CS212 (in either direction)
are encouraged during the first two weeks.<BR>

<P>
<B>Reaching Us <BR>
</B>
<P>
The best way to reach the course staff is by posting questions
or comments using the CS212 Web site <TT>http://www.cs.cornell.edu/Info/Courses/Current/CS212/</TT>
 This site contains all course materials, and runs a CoNote server
which allows students and staff to post questions and answers
as &quot;annotations&quot; to the handouts and problem sets. 
In order to access the Web site you will need to request a user-id
and password for the CoNote system.  To do this, simply go to
the CS212 home page and follow the instructions.  Your user-id
and password will be created by Monday if you request them this
week.<BR>

<P>
You can also reach the course staff is by sending email to <TT>cs212@cs.cornell.edu
</TT>but this should not be used for asking questions about
problem sets or handouts (use the Web site).
<P>
 
<P>
<B>Who We Are</B>
<P>
 
<P>
Dan Huttenlocher, Professor, 4119 Upson 
<P>
Tobias Mayr, TA, 5148 Upson
<P>
James Hamblin, ugrad TA
<P>
Robert Szewczyk, ugrad TA
<P>
Justin Voskuhl, ugrad TA
<P>
Andras Ferencz, consultant
<P>
 Melissa Ho, consultant<BR>

<P>
<B>When We Meet<BR>
</B>
<P>
Lectures are Tuesday and Thursday at 10:10, in B11 Kimball and
recitations are Monday and Wednesday at 1:25, 2:30 or 3:35.  Recitations
expand on the material in lecture, and provide more opportunity
to ask questions.
<P>
 
<P>
Consulting hours, for help with problem sets or other questions,
will be held from 7pm until midnight the two evenings before each
problem set is due (see schedule below).  Thus for problem sets
due on a Tuesday there will be consulting hours Sunday and Monday
evenings and for those due on a Thursday there will be consulting
hours Tuesday and Wednesday evenings. Consulting hours are in
the public Mac lab in B7 Upson.<BR>

<P>
Office hours are: James Hamblin TBA, Dan Huttenlocher T 1:00-2:00,
Tobias Mayr F 12:15-1:15, Robert Szewczyk TBA, Justin Voskuhl
TBA.<BR>

<P>
<B>Course Materials<BR>
</B>
<P>
There is no textbook for this course.  There will be course handouts
and lecture notes, which will be available both in hardcopy and
on the course Web site.<BR>

<P>
The Dylan interpreter is available free on the course Web site,
and was developed by Justin Voskuhl for this class.  It is implemented
in Java, and thus will run under any Java capable Web browser.
 The best current browser (it changes almost weekly) is Netscape
3.0 for Windows95/NT, which has Borland's just-in-time Java compiler.
 There are also standalone versions available that you can download
onto your computer if you do not want to use the Web browser version.
 One word of warning: if you download a standalone Dylan onto
your machine, <I>make sure that you are using the most recent
version</I> by checking the web site.<BR>

<P>
<B>Course Requirements<BR>
</B>
<P>
Students are responsible for all material in the assigned readings,
as well as that covered in lectures and in recitations.  There
will be six problem sets, two preliminary exams, and a final exam
(a schedule is given below).  Each problem set will be a combination
of written exercises and a programming assignment.  Course grades
will be based on a combination of the problem sets and exam scores.
 The problem sets will account for approximately one half of the
total grade. <I>No late assignments will be accepted</I> (we will
generally grade assignments immediately and return them the following
class period).<BR>

<P>
You should try to complete the programming assignments early,
as we will not accept late work. The best use of your time and
the machine's time is to <I>think about the problems before sitting
down at the computer</I>. [No matter how many times we say this,
it takes a long time to sink in; think about the problems before
sitting down at the computer.]<BR>

<P>
<B>Policy on Joint Work<BR>
</B>
<P>
Much of the learning in this course comes from doing the programming
problems.  You may work jointly with one other person on the assignments
(no more than two people should work together).  However, if you
work together with someone, <I>you must submit a single joint
assignment with both names on it</I>.  <B>Under no circumstances
may you hand in work done with (or by) someone else under your
own name</B>.  If in doubt, credit the person(s) from whom you
got help.  You would be amazed at how easy it is to tell when
people work together on problem sets, so please don't make life
unpleasant for all of us by breaking these rules.<BR>

<P>
<B>Public Lab Facilities<BR>
</B>
<P>
CIT and various colleges on campus provide public Macintosh and
PC facilities, you may use your own machine or the public ones.
 The CS department does not provide computer facilities for this
course. The course consultants will be available in the B7 Upson
Mac lab (see above).<BR>

<P>
<B>Problem Set Due Dates and Exam Dates<BR>
</B>
<P>
All problem sets are due before 2am on the due date.  For example,
an assignment due Tuesday must be submitted electronically to
the course server by 2am on Tuesday (that is late <I>Monday</I>
night).  No late assignments are accepted, so make sure you submit
your final solution by the correct time and date.<BR>

<P>
[9/12] Assignment 1 
<P>
[9/24] Assignment 2 
<P>
[10/8] Assignment 3 
<P>
[10/17] Prelim 1, 7:30pm 
<P>
[10/29] Assignment 4 
<P>
[11/12] Assignment 5 
<P>
[11/19] Prelim 2, 7:30pm 
<P>
[12/5] Assignment 6 
<P>
[12/19] Final Exam -- see exam schedule 
<P>
 
<P>
<B>Lecture Outline</B>  <BR>

<P>
 [8/29] The Study of Computation, and an Introduction to Dylan

<P>
 [9/3] Function Abstraction and the Substitution Model of Evaluation

<P>
 [9/5] Procedures and Processes: Iteration, Recursion and Induction

<P>
 [9/10] Higher Order Procedures: Functional Arguments and Values

<P>
 [9/12] Analysis of Algorithms: Orders of Growth 
<P>
 [9/17] Data Abstraction: Structures, Contracts and Implementations

<P>
 [9/19] Hierarchical Data: Lists, Trees and the need for Quotation

<P>
 [9/24] Recursive List Processing and Reasoning about Lists 
<P>
 [9/26] Symbolic Differentiation: An Extended Example 
<P>
 [10/1] Generic Operations: Type Dispatching and Generic Functions

<P>
 [10/3] Generic Operations: Polynomial Arithmetic System 
<P>
 [10/8] Assignment and the Environment Model of Evaluation 
<P>
 [10/10] Assignment and Local State Variables 
<P>
 [10/17] Objects with State and Object Oriented Programming 
<P>
 [10/22] Object Oriented Programming and Inheritance 
<P>
 [10/24] Multimethods and More About Object Oriented Programming
<P>
 [10/29] Mutable Data: Stacks and Queues
<P>
 [10/31] Mutable Data: Heaps, Heapsort and Priority Queues
<P>
 [11/5] The Metacircular Evaluator: Dylan in Dylan
<P>
 [11/7] Variations on Expression Evaluation
<P>
 [11/12] Compilation and Optimization
<P>
 [11/14] Streams 
<P>
 [11/19] Infinite Streams
<P>
 [11/21] Nonlocal Exits: Catch and Throw
<P>
 [11/26] Garbage Collection and the Illusion of Infinite Memory
<P>
 [12/3] Topics in CS: Randomization and Quicksort 
<P>
 [12/5] Topics in CS: Computability 
</BODY>

</HTML>
